package modelo.bd.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modelo.bd.ConexionPool;
import modelo.bd.excepcion.DAOException;
import modelo.dominio.Anexo;

public class AnexoDAO {

    private String query;

    public void add(Anexo entity, String usuario) throws DAOException {
        Connection conexion = null;
        PreparedStatement sentencia = null;
        try {
            GenericoDAO dao = new GenericoDAO();
            String condicionMax = "anfp_fapr_numero  = " + entity.getFactura().getIdentificador() + " \n"
                    + "AND    anfp_prpo_numero  = " + entity.getFactura().getProveedor().getIdentificador();
            long folio = dao.selectMax("sil_anexos_factura_proveedor", "ANFP_NUMERO", condicionMax);
            query = "INSERT INTO sil_anexos_factura_proveedor  ( \n"
                    + "       anfp_prpo_numero, \n"
                    + "       anfp_fapr_numero, \n"
                    + "       anfp_numero, \n"
                    + "       anfp_documento, \n"
                    + "       anfp_ruta, \n"
                    + "       anfp_usuario_creo, \n"
                    + "       anfp_fecha_creo) \n"
                    + "VALUES('" + entity.getFactura().getProveedor().getIdentificador()
                    + "', " + entity.getFactura().getIdentificador()
                    + ", " + folio
                    + ",'" + entity.getNombreDocumento()
                    + "','" + entity.getRuta()
                    + "','" + usuario
                    + "', SYSDATE)";
            conexion = ConexionPool.getInstancia().getConexion();
            sentencia = conexion.prepareStatement(query);
            sentencia.executeUpdate();
        } catch (SQLException ex) {
            throw new DAOException("Error ANDA-SQL " + ex.getMessage());
        } finally {
            try {
                if (sentencia != null) {
                    sentencia.close();
                }
                if (conexion != null) {
                    conexion.close();
                }
            } catch (SQLException ex) {
                throw new DAOException("Error ANDA-SQL " + ex.getMessage());
            }
        }
    }

    protected List<Anexo> select() throws DAOException {
        Connection conexion = null;
        PreparedStatement sentencia = null;
        ResultSet resultado = null;
        List<Anexo> resultados = null;
        try {
            conexion = ConexionPool.getInstancia().getConexion();
            sentencia = conexion.prepareStatement(query);
            resultado = sentencia.executeQuery();
            resultados = new ArrayList<Anexo>();
            while (resultado.next()) {
                Anexo anexo = new Anexo();
                anexo.setIdentificador(resultado.getLong("identificador"));
                anexo.setNombreDocumento(resultado.getString("nombre_documento"));
                anexo.setRuta(resultado.getString("ruta_archivo"));
                //anexo.setFactura(Facturas.instancia().);
                resultados.add(anexo);
            }
        } catch (SQLException ex) {
            throw new DAOException("Error ANDS-SQL " + ex.getMessage());
        } finally {
            try {
                if (resultado != null) {
                    resultado.close();
                }
                if (sentencia != null) {
                    sentencia.close();
                }
                if (conexion != null) {
                    conexion.close();
                }
            } catch (SQLException ex) {
                throw new DAOException("Error ANDS-SQL " + ex.getMessage());
            }
        }
        return resultados;
    }

    public List<Anexo> selectAll() throws DAOException {
        query = ("SELECT anfp_prpo_numero AS proveedor, \n"
                + "       anfp_fapr_numero AS factura, \n"
                + "       anfp_numero      AS identificador, \n"
                + "       anfp_documento   AS nombre_documento, \n"
                + "       anfp_ruta        AS ruta_archivo \n"
                + "FROM   sil_anexos_factura_proveedor");
        return select();
    }

    public List<Anexo> selectWhere(String condition) throws DAOException {
        query = ("SELECT anfp_prpo_numero AS proveedor, \n"
                + "       anfp_fapr_numero AS factura, \n"
                + "       anfp_numero      AS identificador, \n"
                + "       anfp_documento   AS nombre_documento, \n"
                + "       anfp_ruta        AS ruta_archivo \n"
                + "FROM   sil_anexos_factura_proveedor \n"
                + "WHERE  " + condition);
        return select();
    }
}
